跳到主要内容

播放音频(Playing Audio)

关于如何在 .riv 文件中添加音频(Audio),请先阅读:音频事件(Audio Events)

在 Web 端(Web),部分浏览器会限制“未交互页面自动播放音频”。

这不是 Rive 特有行为,而是浏览器通用策略:页面需要先产生一次用户交互(触摸 / 点击),之后才能播放声音。

嵌入资源(Embedded Assets)

使用嵌入资源(Embedded Assets)时,通常无需额外处理即可播放音频。

但在某些平台上,如需设置混音(mix)、压低(duck)等全局音频策略,仍需额外配置,见下文“音频设置(Audio Settings)”。

引用资源(Referenced Assets)

引用资源(Referenced Assets)也可以自动触发播放,但前提是:运行时(Runtime)尝试播放时,音频文件必须已可加载。

更多信息见:加载资源(Loading Assets)

Apple 示例(Swift)

// Load a referenced audio file, with the same name and extension as added in the editor
let viewModel = RiveViewModel(fileName: "my_rive_file") { asset, data, factory -> Bool in
guard let audioAsset = asset as? RiveAudioAsset else {
return false
}

guard let url = Bundle.main.url(
forResource: audioAsset.uniqueName(),
withExtension: audioAsset.fileExtension()
) else {
print("Failed to load asset \(asset.uniqueFilename()) from bundle.")
return false
}

guard let data = try? Data(contentsOf: url) else {
print("Failed to load \(url) from bundle.")
return false
}

audioAsset.audio(factory.decodeAudio(data))
return true
}

音频设置(Audio Settings)

在 iOS 上,音频播放会遵循 AVAudioSession 的共享实例设置。

  • 官方文档:AVAudioSession
  • 可用于控制:混音(mix)、压低(duck)等策略
  • 建议在应用生命周期早期完成配置
// Example: Ignore the silent switch, and mix with other audio
let category: AVAudioSession.Category = .playback
let options: AVAudioSession.CategoryOptions = [.mixWithOthers]
AVAudioSession.sharedInstance().setCategory(category, options: options)

设置音量(Setting Volume)

Artboard 可以单独设置音量(volume)。

  • 父 Artboard 的音量会影响其组件实例(component instances)
  • 但设置组件实例音量,不会反向更新父 Artboard
// Set the current artboard's volume to 50%
let viewModel = RiveViewModel(fileName: "my_rive_file")
viewModel.riveModel?.volume = 0.5